function [freq, spectrum] = plotCustomSpectrum(data, pn,raw_fs,OSR,plot_title)
    % PLOTCUSTOMSPECTRUM 计算信号频谱并绘图
    % 输入：
    %   data      - 输入信号（一维向量）
    %   N         - 波形采样点个数
    %   Fs        - 采样频率
    %   plot_title- figure窗口标题
    % 输出：
    %   freq      - 频率向量（Hz）
    %   spectrum  - 频谱幅度

%     win=hamming(N);
%     xw = 1.586*data.*win';
%
%     % FFT计算
%     Y = fft(xw);

    Custom_data = data(pn*OSR/4+1-OSR+1 : pn*OSR-OSR+1);
    N = length(data)*3/4;
    Fs = raw_fs * OSR;


    Y = fft(Custom_data,N);


    % 幅度谱计算
    P2 = abs(Y / N);          % 双边幅度谱归一化
    P1 = P2(1:floor(N/2)+1); % 单边幅度谱
    P1(2:end-1) = 2 * P1(2:end-1); % 能量校正[3,9](@ref)
    spectrum = P1;

    % 生成频率轴
    freq = Fs * (0:length(spectrum)-1) / N;

    % 转换为dB单位
    spectrum = 20 * log10(spectrum );

    fft_data(1).spectrum = spectrum;
    fft_data(1).plot_title = plot_title;

    % ==== 绘图 ====
    figure;
    hold on;

    % ==== 主瓣和噪声划分 ====
    mainlobe_mask = freq <= 20000;  % 主瓣定义为 0~20kHz
    noise_mask    = ~mainlobe_mask;

    % 主瓣用红色线绘制
    plot(freq(mainlobe_mask), fft_data(1).spectrum(mainlobe_mask), 'r', 'LineWidth', 1.5);
    % 噪声用蓝色线绘制
    plot(freq(noise_mask), fft_data(1).spectrum(noise_mask), 'b--', 'LineWidth', 1);
    % 画辅助线标注主瓣界限
    ylimits = ylim;
    line([22000 22000], ylimits, 'Color', [0.5 0.5 0.5], 'LineStyle', ':');

    % 图形设置
    xlabel('频率 (Hz)');
    ylabel('幅度 (dB)');
    title(sprintf('%s\n主瓣 vs 噪声对比(主瓣 ≤ 20KHz)', fft_data(1).plot_title));
    legend('主瓣频段 (≤20KHz)', '噪声频段 (>20KHz)', 'Location', 'best');
    xlim([0, min(Fs/2, 100e3)]);
    grid on;
end